#!/bin/sh

# Slackware build script for libretro-samples

# Copyright 2016, 2018 Hunter Sezen California, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

PRGNAM=libretro-samples
VERSION=${VERSION:-2018.04.18_882017d}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

LIBDIRSUFFIX=
[ "$ARCH" = x86_64 ] && LIBDIRSUFFIX=64

set -eu

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
  -o -perm 511 \) -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
  -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;

basic=; g=; pascal=; vulkan=

[ "${DEBUG:=0}" != 0 ] && { DEBUG=1; g='-g'; }
[ "${VULKAN:-0}" != 0 ] && \
  vulkan='video/vulkan/vk_async_compute video/vulkan/vk_rendering'

# The freebasic core requires jdk and doesn't do anything.
# [ -x /usr/bin/fbc ] && basic='lang/freebasic'

[ -x /usr/bin/fpc ] && pascal='lang/pascal'

SAMPLES="audio/audio_callback \
         audio/audio_no_callback \
         audio/audio_playback_wav \
         $basic \
         $pascal \
         tests/cruzes \
         tests/test \
         tests/test_advanced \
         video/opengl/libretro_test_gl_compute_shaders \
         video/opengl/libretro_test_gl_fixedfunction \
         video/opengl/libretro_test_gl_shaders \
         video/software/rendering \
         video/software/rendering_direct_to_vram \
         $vulkan"

# Included with RetroArch
#         input/button_test \

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION

eval "set -- $SAMPLES"
for core do
  base="${core##*/}"

  case "$base" in
    audio_callback)
      LIBNAM=test${base}_libretro
    ;;
    audio_no_callback)
      LIBNAM=test${base}_libretro
    ;;
    audio_playback_wav)
      LIBNAM=test${base}_libretro
    ;;
    button_test)
      LIBNAM=testinput_buttontest_libretro
    ;;
    cruzes)
      LIBNAM=${base}_libretro
    ;;
    freebasic)
      LIBNAM=${base}_libretro
    ;;
    libretro_test_gl_compute_shaders)
      LIBNAM=testgl_compute_shaders_libretro
    ;;
    libretro_test_gl_fixedfunction)
      LIBNAM=testgl_ff_libretro
    ;;
    libretro_test_gl_shaders)
      LIBNAM=testgl_libretro
    ;;
    pascal)
      LIBNAM=${base}_pong_libretro
    ;;
    rendering)
      LIBNAM=testsw_libretro
    ;;
    rendering_direct_to_vram)
      LIBNAM=testsw_vram_libretro
    ;;
    test)
      LIBNAM=${base}_libretro
    ;;
    test_advanced)
      LIBNAM=advanced_tests_libretro
    ;;
    vk_async_compute)
      LIBNAM=testvulkan_async_compute_libretro
    ;;
    vk_rendering)
      LIBNAM=testvulkan_libretro
    ;;
    *)
      printf %s\\n "$base not found"; exit 1
    ;;
  esac

  case "$core" in
    $pascal)
      fpc $g -o"$core/$LIBNAM.so" "$core/pong.pas"
    ;;
    $basic)
      fbc $g -dll "$core/fbastest.bas" -x "$core/$LIBNAM.so"
    ;;
    *)
      ( cd "$core" ; make DEBUG=$DEBUG )
    ;;
  esac

  install -Dm0644 $core/$LIBNAM.so \
    $PKG/usr/lib${LIBDIRSUFFIX}/libretro/$LIBNAM.so
  install -Dm0644 $LIBNAM.info \
    $PKG/usr/lib${LIBDIRSUFFIX}/libretro/info/$LIBNAM.info
  cp -a $core/README.md $PKG/usr/doc/$PRGNAM-$VERSION/README_$LIBNAM
done

if [ $DEBUG = 0 ]; then
  find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" |
    grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
fi

cp -a tests/cruzes/LICENSE $PKG/usr/doc/$PRGNAM-$VERSION/LICENSE-cruzes
cp -a license tests/cruzes/LICENSE-Carlito $PKG/usr/doc/$PRGNAM-$VERSION
[ ${pascal} ] && \
  cp -a $pascal/LICENSE $PKG/usr/doc/$PRGNAM-$VERSION/LICENSE-pascal
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
